package cn.liontalk.SinglePattern.pattern1;

public class General2 {

    private static volatile General2 general2 = null;

    private General2() {
    }


    public static synchronized General2 getGeneral2Instance() {
        // 第一层检查，检查是否有引用指向对象，高并发情况下会有多个线程同时进入
        if (null == general2) {
            // 第一层锁，保证只有一个线程进入
            synchronized (General2.class) {
                // 第二层检查
                if (null == general2) {
                    // volatile 关键字作用为禁止指令重排，保证返回 Singleton 对象一定在创建对象后
                    general2 = new General2();
                }
            }
        }
        return general2;
    }
}
